package com.umpay.util;

import com.umpay.dict.retcode.MerBusiEC;
import com.umpay.exception.BusinessException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

public class EntityMapUtil {
	private static final Logger log = LogManager.getLogger(EntityMapUtil.class);
	
	// Bean --> Map 1: 利用Introspector和PropertyDescriptor 将Bean --> Map
	public static Map<String, Object> transBean2Map(Object obj) {
		if (obj == null) {

			log.info("需要转换的对象不能为空！");
			throw new BusinessException(MerBusiEC.REQPARAM_ERR, "数据校验未通过！");
		}
		Map<String, Object> map = new HashMap<String, Object>();
		try {
			BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
			PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
			for (PropertyDescriptor property : propertyDescriptors) {
				String key = property.getName();
				// 过滤class属性
				if (!key.equals("class")) {
					// 得到property对应的getter方法
					Method getter = property.getReadMethod();
					Object value = getter.invoke(obj);

					map.put(key, value);
				}
			}
		} catch (Exception e) {
			log.error("transBean2Map Error {}" ,e);
		}
		return map;
	}
	
	
	public static void main(String[] args) {
		/*ConsumOrder ConsumOrder = new ConsumOrder();
		
		ConsumOrder.setAmount(Long.valueOf("1000"));
		ConsumOrder.setMerId("7000001");
		
		System.out.println(transBean2Map(ConsumOrder));*/
	}
}
